﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;
using System.Windows.Forms;

namespace Arthus
{
    class Konto
    {
        MySqlConnection konekcija;
        MySqlCommand komanda = new MySqlCommand();
        MySqlDataReader datareader = null;
        MySqlDataAdapter adapter = null;
        DataTable dataTable = null;
        DataSet dataSet = null;

        Posjed posjedObj = null;

        public String VratiNazivKontaNaOsnovuOznake(string oznakaKonta)
        {
            String rezultat = "";
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT KONTONA1 FROM KONTA WHERE KONTOOZN='"+oznakaKonta+"';";
                datareader = komanda.ExecuteReader();
                datareader.Read();
                rezultat = (String)datareader.GetValue(0);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
            return rezultat;
        }

        public void PopuniComboBox(ComboBox combobox)
        {
            combobox.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT KONTOOZN, KONTONA1 FROM KONTA;;";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    combobox.Items.Add(dataTable.Rows[i][0] + " " + dataTable.Rows[i][1]);
                }
                combobox.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        } 

        private String VratiPocetnoStanjeOznakuNaOsnovuIzbora(String izbor)
        {
            String rezultat = "";
            if (izbor.Equals("Saldo") || izbor == "Saldo")
            {
                rezultat = "SL";
            }
            else 
            {
                rezultat = "ST";
            }
            return rezultat;
        }
        private String VratiStringNaOsnovuPocetnogStanjaOznake(String izbor)
        {
            String rezultat = "";
            if (izbor.Equals("SL"))
            {
                rezultat = "Saldo";
            }
            else
            {
                rezultat = "Stavke";
            }
            return rezultat;
        }

        private String VratiSaldoOznakuNaOsnovuIzbora(String izbor)
        {
            String rezultat = "";
            if (izbor.Equals("Dugovni") || izbor == "Dugovni")
            {
                rezultat = "D";
            }
            else
            {
                rezultat = "P";
            }
            return rezultat;
        }
        private String VratiStringNaOsnovuSalda(String izbor)
        {
            String rezultat = "";
            if (izbor.Equals("D"))
            {
                rezultat = "Dugovni";
            }
            else
            {
                rezultat = "Potražni";
            }
            return rezultat;
        }

        private String VratiAnalitikaOznakuNaOsnovuIzbora(String izbor)
        {
            String rezultat = "";
            if (izbor.Equals("Banke") || izbor == "Banke")
            {
                rezultat = "BA";
            }
            else if (izbor.Equals("Kupci/Dobavljači") || izbor == "Kupci/Dobavljači")
            {
                rezultat = "KD";
            }
            else {
                rezultat = "";
            }
            return rezultat;
        }
        private String VratiStringNaOsnovuAnalitike(String izbor)
        {
            String rezultat = "";
            if (izbor.Equals("BA"))
            {
                rezultat = "Banke";
            }
            else
            {
                rezultat = "Kupci/Dobavljači";
            }
            return rezultat;
        }

        private string VratiDiliNNaOsnovuCekiranostiDevizno(CheckBox devizno) {
            if (devizno.Checked == true)
            {
                return "D";
            }
            else {
                return "N";
            }
        }
        private void CekirajNaOsnovuDiliNDevizno(CheckBox devizno, string izbor) {
            if (izbor.Equals("D"))
            {
                devizno.Checked = true;
            }
            else {
                devizno.Checked = false;
            }
        }

        private string VratiDiliNNaOsnovuCekiranostiMaterijalno(CheckBox materijalno)
        {
            if (materijalno.Checked == true)
            {
                return "D";
            }
            else
            {
                return "N";
            }
        }
        private void CekirajNaOsnovuDiliNMaterijalno(CheckBox materijalno, string izbor)
        {
            if (izbor.Equals("D"))
            {
                materijalno.Checked = true;
            }
            else
            {
                materijalno.Checked = false;
            }
        }

        public void PopuniListBox(ListBox lb)
        {
            lb.Items.Clear();
            try
            {
                //konekcija sa bazom i punjenje dataset-a
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                komanda.Connection = konekcija;
                komanda.CommandText = "SELECT KONTOOZN, KONTONA1 FROM KONTA;";
                dataTable = new DataTable();
                adapter = new MySqlDataAdapter();
                adapter.SelectCommand = komanda;
                adapter.Fill(dataTable);

                adapter.Dispose();
                konekcija.Close();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    lb.Items.Add(dataTable.Rows[i][0] + ". " + dataTable.Rows[i][1]);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                dataTable.Dispose();
                adapter.Dispose();
                konekcija.Close();
            }
        }

        public void PopuniKontroleNaOsnovuOznakeKonta(string oznakaKonta, TextBox oznaka, TextBox naziv, TextBox naziv2, ComboBox vrsta, ComboBox pocetnoStanje, 
            ComboBox saldo, ComboBox pJedinica, ComboBox analitika, CheckBox devizno, CheckBox materijalno)
        {
            try
            {
                posjedObj = new Posjed();
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "SELECT KONTOOZN, KONTONA1, KONTONA2, KONTOVRS, KONTOPST, KONTOSAL, KONTOMAG, KONTOANA, KONTODEV, KONTOMAT FROM KONTA "
                    +" WHERE KONTOOZN='" + oznakaKonta + "';";
                datareader = komanda.ExecuteReader();
                while (datareader.Read())
                {
                    oznaka.Text = datareader.GetValue(0).ToString();
                    naziv.Text = datareader.GetValue(1).ToString();
                    naziv2.Text = datareader.GetValue(2).ToString();
                    vrsta.SelectedIndex = vrsta.Items.IndexOf(datareader.GetValue(3).ToString());
                    pocetnoStanje.SelectedIndex = pocetnoStanje.Items.IndexOf(VratiStringNaOsnovuPocetnogStanjaOznake(datareader.GetValue(4).ToString()));
                    saldo.SelectedIndex = saldo.Items.IndexOf(VratiStringNaOsnovuSalda(datareader.GetValue(5).ToString()));
                    if (Convert.ToInt32(datareader.GetValue(6).ToString()) != 0)
                    {
                        pJedinica.SelectedIndex = pJedinica.Items.IndexOf(posjedObj.VratiOznakuPosjedaNaOsnovuID(Convert.ToInt32(datareader.GetValue(6).ToString())));
                    }
                    else {
                        pJedinica.SelectedIndex = 0;
                    }
                    if (datareader.GetValue(7).ToString().Equals("") || datareader.GetValue(7).ToString() == null)
                    {
                        analitika.SelectedIndex = 0;
                    }
                    else { 
                        analitika.SelectedIndex=analitika.Items.IndexOf(VratiStringNaOsnovuAnalitike(datareader.GetValue(7).ToString()));
                    }
                    CekirajNaOsnovuDiliNDevizno(devizno, datareader.GetValue(8).ToString());
                    CekirajNaOsnovuDiliNMaterijalno(materijalno, datareader.GetValue(9).ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                datareader.Close();
                konekcija.Close();
            }
        }

        private int VratiIdComboBoxa(ComboBox cb)
        {
            posjedObj = new Posjed();
            if (cb.SelectedItem.ToString().Equals("Za sve prodajne jedinice"))
            {
                return 0;
            }
            else
            {
                return posjedObj.VratiIDPosjedaNaOsnovuOznake(cb.SelectedItem.ToString());
            }
        }

        public void DodajKonto(TextBox oznakaKonta, TextBox naziv, TextBox naziv2, ComboBox vrsta, ComboBox pocetnoStanje,
            ComboBox saldo, ComboBox pJedinica, ComboBox analitika, CheckBox devizno, CheckBox materijalno)
        {
            try
            {
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = string.Format("INSERT INTO `konta`(`KONTOOZN`, `KONTONA1`, `KONTONA2`, `KONTOVRS`, `KONTOPST`, `KONTOSAL`, `KONTOMAG`, "
                    +" `KONTOANA`, `KONTODEV`, `KONTOMAT`) VALUES ('"+oznakaKonta.Text+"','"+naziv.Text+"','"+naziv2.Text+"','"
                    +vrsta.SelectedItem.ToString()+"','"+VratiPocetnoStanjeOznakuNaOsnovuIzbora(pocetnoStanje.SelectedIndex.ToString())+"','"
                    +VratiSaldoOznakuNaOsnovuIzbora(saldo.SelectedIndex.ToString())+"',"+VratiIdComboBoxa(pJedinica)+",'"
                    +VratiAnalitikaOznakuNaOsnovuIzbora(analitika.SelectedItem.ToString())+"','"+VratiDiliNNaOsnovuCekiranostiDevizno(devizno)+"','"
                    +VratiDiliNNaOsnovuCekiranostiMaterijalno(materijalno)+"')");
                int response = komanda.ExecuteNonQuery();
                MessageBox.Show("Uspešno dodat novi konto!");
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Već postoji konto sa takvom oznakom!");
            }
            catch (FormatException ex)
            {
                MessageBox.Show("Greška u formatu unosa! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void IzmeniKonto(string oznaka, TextBox oznakaKonta, TextBox naziv, TextBox naziv2, ComboBox vrsta, ComboBox pocetnoStanje,
            ComboBox saldo, ComboBox pJedinica, ComboBox analitika, CheckBox devizno, CheckBox materijalno)
        {
            try
            {
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = @"UPDATE `konta` SET `KONTOOZN`='"+oznakaKonta.Text+"',`KONTONA1`='"+naziv.Text+"',`KONTONA2`='"+naziv2.Text+"',`KONTOVRS`='"
                    + vrsta.SelectedItem.ToString() + "',`KONTOPST`='" + VratiPocetnoStanjeOznakuNaOsnovuIzbora(pocetnoStanje.SelectedIndex.ToString()) + "',`KONTOSAL`='"
                    + VratiSaldoOznakuNaOsnovuIzbora(saldo.SelectedIndex.ToString()) + "',`KONTOMAG`='" + VratiIdComboBoxa(pJedinica) + "',`KONTOANA`='"
                    + VratiAnalitikaOznakuNaOsnovuIzbora(analitika.SelectedItem.ToString()) + "',`KONTODEV`='"
                    + VratiDiliNNaOsnovuCekiranostiDevizno(devizno) + "',`KONTOMAT`='" + VratiDiliNNaOsnovuCekiranostiMaterijalno(materijalno) + "' WHERE KONTOOZN='"
                    +oznaka+"'";
                int response = komanda.ExecuteNonQuery();
                MessageBox.Show("Uspešno izmenjen konto!");
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Već postoji konto sa takvom oznakom!");
            }
            catch (FormatException ex)
            {
                MessageBox.Show("Greška u formatu unosa! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }

        public void ObrisiKonto(string oznakaKonta)
        {
            try
            {
                //konekcija sa bazom
                konekcija = new MySqlConnection(statickePromenljive.konekcioniString);
                konekcija.Open();
                komanda.Connection = konekcija;
                komanda.CommandType = CommandType.Text;
                komanda.CommandText = "DELETE FROM `konta` WHERE KONTOOZN='" + oznakaKonta + "';";
                komanda.ExecuteNonQuery();
                MessageBox.Show("Uspešno obrisan konto!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Neočekivana greška! \n" + ex.ToString(), "Greška!", MessageBoxButtons.OK);
            }
            finally
            {
                konekcija.Close();
            }
        }
    }
}
